classdef atmosphere
    properties
        n;        % 大气折射率
        rou;      % 与大气密度比
        N;        % 大气分子数量密度，单位1/m^3
        del;      % 形状因子
        R_v;      % 能见度 km，晴朗20km，霾3km，雾0.5km，雨2.5km
        lambda_0; % 可见光平均波长
        sigma_a;  % o3的吸收截面
        c_o3;     % o3浓度（晴朗天气下是25-75）
        N_o3;     % o3数密度
        K_a;      % 大气吸收系数
    end

    methods
        % 构造函数
        function obj = atmosphere()
            obj.n = 1.00029;                               % 大气折射率
            obj.rou = 1;                                   % 大气密度比
            obj.N = 2.504e25;                              % 大气分子数量密度，单位1/m^3
            obj.del = 0.035;                               % 形状因子，一般为0.035
            obj.R_v = 20;                                  % 能见度 km，晴朗20km，霾3km，雾0.5km，雨2.5km
            obj.lambda_0 = 550e-9;                         % 可见光平均波长
            obj.sigma_a = 1.147e-17;                       % o3的吸收截面
            obj.c_o3 = 30;                                 % o3浓度（晴朗天气下是25-75）
            obj.N_o3 = 2.69e19;                            % o3数密度
            obj.K_a = obj.sigma_a*obj.c_o3*obj.N_o3*1e-7;  % 大气吸收系数
        end

        % 得到K_sr
        function K_sr = get_K_sr(obj, lambda)
            K_sr = ((8*pi^3*(obj.n^2-1)^2*obj.rou)/(3*obj.N*lambda^4))*((6+3*obj.del)/(6-7*obj.del));
        end

        % 得到K_sm
        function K_sm = get_K_sm(obj, lambda)
            K_sr550 = obj.get_K_sr(obj.lambda_0);
            K_sm = ((3.912/obj.R_v)-K_sr550)*0.001*(lambda/obj.lambda_0)^(-0.585*obj.R_v^(1/3));
        end

        % 得到K_a
        function K_a = get_K_a(obj)
            K_a = obj.K_a;
        end
    end
end